// 文件名：unordered_map_id_index.cpp
// 目的：将数组中的条目构建为“ID -> 偏移”的哈希索引，支持常数时间定位。
// 要点：
//   - 输入 catalog：包含 {id, offset} 的条目数组；
//   - unordered_map<uint64_t,uint64_t> index：映射 ID -> offset；
//   - reserve(catalog.size())：按已知规模预留空间；
//   - locate(id)：find 命中则输出偏移，否则提示缺失。
// 复杂度：构建与查询均摊 O(1)。

#include <cstdint>
#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>

int main() {
    struct Entry { std::uint64_t id; std::uint64_t offset; };
    std::vector<Entry> catalog = {
        {1001, 0}, {1002, 128}, {1003, 256}, {2001, 512}
    };

    std::unordered_map<std::uint64_t, std::uint64_t> index;
    index.reserve(catalog.size());

    for (const auto& entry : catalog) {
        index.emplace(entry.id, entry.offset);
    }

    auto locate = [&](std::uint64_t id) {
        if (auto it = index.find(id); it != index.end()) {
            std::cout << "ID " << id << " located at offset " << it->second << '\n';
        } else {
            std::cout << "ID " << id << " missing.\n";
        }
    };

    locate(1002);
    locate(9999);

    return 0;
}